#include "SQLBetweenExpr.h"
#include "../../visitor/SQLASTVisitor.h"

SQLBetweenExpr::SQLBetweenExpr()
{
}
SQLBetweenExpr::~SQLBetweenExpr()
{
  // if (testExpr != NULL)
  // {
  //   delete testExpr;
  //   testExpr = NULL;
  // }

  // if (beginExpr != NULL)
  // {
  //   delete beginExpr;
  //   beginExpr = NULL;
  // }

  // if (endExpr != NULL)
  // {
  //   delete endExpr;
  //   endExpr = NULL;
  // }
}
SQLBetweenExpr::SQLBetweenExpr(SQLExpr_ptr theTestExpr, SQLExpr_ptr theBeginExpr, SQLExpr_ptr theEndExpr)
    :

      testExpr(theTestExpr), beginExpr(theBeginExpr), endExpr(theEndExpr)
{
  // setTestExpr(testExpr);
  // setBeginExpr(beginExpr);
  // setEndExpr(endExpr);
}

SQLBetweenExpr::SQLBetweenExpr(SQLExpr_ptr theTestExpr, BOOL_ptr theXnot, SQLExpr_ptr theBeginExpr, SQLExpr_ptr theEndExpr) : testExpr(theTestExpr), beginExpr(theBeginExpr), endExpr(theEndExpr), xnot(theXnot)

{
  // this(testExpr, beginExpr, endExpr);
  // this.xnot = xnot;
}

void SQLBetweenExpr::accept0(SQLASTVisitor_ptr visitor)
{
  if (visitor->visit(SharedObject(SQLBetweenExpr)))
  {
    acceptChild(visitor, testExpr);
    acceptChild(visitor, beginExpr);
    acceptChild(visitor, endExpr);
  }
  visitor->endVisit(SharedObject(SQLBetweenExpr));
}

SQLExpr_ptr SQLBetweenExpr::getTestExpr()
{
  return testExpr;
}

void SQLBetweenExpr::setTestExpr(SQLExpr_ptr theTestExpr)
{
  if (theTestExpr != NULL)
  {
    theTestExpr->setParent(SharedObject(SQLBetweenExpr));
  }
  testExpr = theTestExpr;
}

BOOL_ptr SQLBetweenExpr::isNot()
{
  return xnot;
}

void SQLBetweenExpr::setNot(BOOL_ptr theXnot)
{
  xnot = theXnot;
}

SQLExpr_ptr SQLBetweenExpr::getBeginExpr()
{
  return beginExpr;
}

void SQLBetweenExpr::setBeginExpr(SQLExpr_ptr theBeginExpr)
{
  if (theBeginExpr != NULL)
  {
    theBeginExpr->setParent(SharedObject(SQLBetweenExpr));
  }
  beginExpr = theBeginExpr;
}

SQLExpr_ptr SQLBetweenExpr::getEndExpr()
{
  return endExpr;
}

void SQLBetweenExpr::setEndExpr(SQLExpr_ptr theEndExpr)
{
  if (theEndExpr != NULL)
  {
    theEndExpr->setParent(SharedObject(SQLBetweenExpr));
  }
  endExpr = theEndExpr;
}

// int SQLBetweenExpr::hashCode() {
// int prime = 31;
// int result = 1;
// result = prime * result + ((beginExpr == NULL) ? 0 : beginExpr.hashCode());
// result = prime * result + ((endExpr == NULL) ? 0 : endExpr.hashCode());
// result = prime * result + (xnot ? 1231 : 1237);
// result = prime * result + ((testExpr == NULL) ? 0 : testExpr.hashCode());
// return result;
//}

// BOOL_ptr SQLBetweenExpr::equals(Object obj) {
// if (this == obj) {
// return BOOL::TRUE;
//}
// if (obj == NULL) {
// return BOOL::FALSE;
//}
// if (getClass() != obj.getClass()) {
// return BOOL::FALSE;
//}
// SQLBetweenExpr other = (SQLBetweenExpr) obj;
// if (beginExpr == NULL) {
// if (other.beginExpr != NULL) {
// return BOOL::FALSE;
//}
//} else if (!beginExpr.equals(other.beginExpr)) {
// return BOOL::FALSE;
//}
// if (endExpr == NULL) {
// if (other.endExpr != NULL) {
// return BOOL::FALSE;
//}
//} else if (!endExpr.equals(other.endExpr)) {
// return BOOL::FALSE;
//}
// if (xnot != other.xnot) {
// return BOOL::FALSE;
//}
// if (testExpr == NULL) {
// if (other.testExpr != NULL) {
// return BOOL::FALSE;
//}
//} else if (!testExpr.equals(other.testExpr)) {
// return BOOL::FALSE;
//}
// return BOOL::TRUE;
//}
